nacos 集群模式接入使用
💡第三方组件声明
因依赖于第三方版本,请第三方组件、中间件和本文保持一致,避免由于第三方升级的兼容性导致无法正常使用。

概述
Nacos 3.2 之后,应用接入除了 HTTP 端口外,还会依赖 gRPC 端口。生产环境建议使用 3 个 Nacos Server + 1 个独立 Console + 1 个 nginx 统一入口 的方式部署集群,对外分别提供控制台入口和应用接入入口。
💡接入建议
使用官方 Nacos 包部署时,PIGX 项目中的 pigx-register 模块无需启动。
推荐将 pigx-register 域名映射到 nginx 所在机器 IP,微服务统一连接 pigx-register:8848。这样可以保持原有接入习惯,同时兼容 Nacos 3.2 的 HTTP 和 gRPC 通信。控制台则单独通过 8080 端口访问。
部署规划
推荐形态如下:
3 个 Nacos Server:负责服务注册、配置管理和集群选举
1 个独立 Console:负责页面管理入口,单独占用 8080
1 个 nginx 入口:统一代理应用侧的 HTTP 8848 和 gRPC 9848
推荐启动顺序如下:
- 启动
server-1
- 启动
server-2
- 启动
server-3
- 启动
console
- 启动
nginx
⚠端口占用
部署前请先确认 8080、8848、9848、18848、18858、18868 没有被其他进程占用。独立 console 会额外占用 8080,不能遗漏。
下载 Nacos Server
官方发行版下载地址:
官方参考文档:
解压后,建议按如下方式准备目录:
/opt/nacos-3.2.1-cluster/
├── server-1/
├── server-2/
├── server-3/
└── console/
其中:
console/ 为独立控制台实例目录
server-1、server-2、server-3 分别为 3 个 Nacos 节点实例目录
端口规划
对外入口
| 类型 | 端口 | 说明 |
|---|
| Console 入口 | 8080 | 人员访问控制台,页面入口 http://ip:8080/ |
| nginx HTTP 入口 | 8848 | 微服务 HTTP/OpenAPI 入口 |
| nginx gRPC 入口 | 9848 | 微服务 gRPC 入口 |
Nacos 节点
| 节点 | HTTP | gRPC(client) | gRPC(server) | JRaft |
|---|
server-1 | 18848 | 19848 | 19849 | 17848 |
server-2 | 18858 | 19858 | 19859 | 17858 |
server-3 | 18868 | 19868 | 19869 | 17868 |
⚠端口说明
8080 只给人访问控制台;8848/9848 只给应用接入;19849/19859/19869 与 17848/17858/17868 属于集群内部通信端口,也需要确保节点间可达。
配置 Nacos 集群
1. 初始化数据库
创建 Nacos 使用的数据库,例如:
CREATE DATABASE IF NOT EXISTS pigxx_config DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
执行 PIGX nacos 配置文件初始化脚本: pigx/db/pigxx_config.sql,将基础表结构和默认数据导入到 pigxx_config 数据库中。
2. 配置 server-1
编辑 server-1/conf/application.properties:
server.address=0.0.0.0
server.tomcat.basedir=file:./work
nacos.server.main.port=18848
nacos.inetutils.ip-address=127.0.0.1
spring.sql.init.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/pigxx_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai
db.user=root
db.password=root
nacos.core.auth.enabled=true
nacos.core.auth.admin.enabled=true
nacos.core.auth.console.enabled=true
nacos.core.auth.system.type=nacos
nacos.core.auth.server.identity.key=PigxNacosIdentityKey
nacos.core.auth.server.identity.value=PigxNacosIdentityValue
nacos.core.auth.plugin.nacos.token.secret.key=VGhpcy1pcy1hLWN1c3RvbS10b2tlbi1zZWNyZXQta2V5LWZvci1waWd4LTMuMi4x
nacos.core.api.compatibility.client.enabled=true
nacos.core.api.compatibility.admin.enabled=true
nacos.core.api.compatibility.console.enabled=true
💡配置说明
nacos.inetutils.ip-address 请改为当前节点实际 IP。单机多实例演示场景可以使用 127.0.0.1,多机部署时必须填写节点真实地址。
3. 配置 server-2 和 server-3
复制 server-1 配置到 server-2、server-3,仅调整主端口:
server-2:nacos.server.main.port=18858
server-3:nacos.server.main.port=18868
4. 配置集群节点
分别编辑 3 个节点的 conf/cluster.conf,内容保持一致:
127.0.0.1:18848
127.0.0.1:18858
127.0.0.1:18868
⚠节点地址
如果是多机部署,请将 127.0.0.1 替换为各节点真实 IP,并确保 cluster.conf、nacos.inetutils.ip-address、防火墙放行规则三者保持一致。
5. 配置独立 console
控制台建议独立部署,不与 server 节点复用端口。编辑 console/conf/application.properties:
server.address=0.0.0.0
server.tomcat.basedir=file:./work
nacos.server.main.port=18080
nacos.console.port=8080
nacos.console.contextPath=
nacos.console.remote.server.context-path=/nacos
nacos.inetutils.ip-address=127.0.0.1
nacos.core.auth.enabled=true
nacos.core.auth.admin.enabled=true
nacos.core.auth.console.enabled=true
nacos.core.auth.system.type=nacos
nacos.core.auth.server.identity.key=PigxNacosIdentityKey
nacos.core.auth.server.identity.value=PigxNacosIdentityValue
nacos.core.auth.plugin.nacos.token.secret.key=VGhpcy1pcy1hLWN1c3RvbS10b2tlbi1zZWNyZXQta2V5LWZvci1waWd4LTMuMi4x
nacos.core.api.compatibility.client.enabled=true
nacos.core.api.compatibility.admin.enabled=true
nacos.core.api.compatibility.console.enabled=true
💡控制台说明
控制台只给人访问,推荐独立监听 8080,页面入口为 http://ip:8080。应用注册与配置拉取仍然走 nginx 暴露的 8848/9848,不要让业务应用直接连 console。
6. 配置 nginx 统一入口
应用入口推荐由 nginx 统一代理:
upstream nacos_app_http {
server 127.0.0.1:18848 max_fails=3 fail_timeout=30s;
server 127.0.0.1:18858 max_fails=3 fail_timeout=30s;
server 127.0.0.1:18868 max_fails=3 fail_timeout=30s;
keepalive 32;
}
server {
listen 8848;
server_name _;
location / {
proxy_pass http://nacos_app_http;
proxy_connect_timeout 5s;
proxy_read_timeout 600s;
proxy_send_timeout 600s;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto http;
}
}
upstream nacos_app_grpc {
server 127.0.0.1:19848 max_fails=3 fail_timeout=30s;
server 127.0.0.1:19858 max_fails=3 fail_timeout=30s;
server 127.0.0.1:19868 max_fails=3 fail_timeout=30s;
}
server {
listen 9848;
proxy_connect_timeout 5s;
proxy_timeout 600s;
proxy_pass nacos_app_grpc;
}
💡入口约定
微服务侧只需要配置 server-addr=nginx-ip:8848,但 nginx 侧必须同时对外暴露 8848 和 9848,否则 Nacos 3.2 客户端会连接异常。
⚠gRPC 转发
9848 的代理配置必须放在 nginx stream 模块中做 TCP 转发,不能按普通 HTTP 代理处理。
启动集群
依次启动 3 个 Nacos 节点、1 个独立 console 和 nginx:
sh /opt/nacos-3.2.1-cluster/server-1/bin/startup.sh -d server
sh /opt/nacos-3.2.1-cluster/server-2/bin/startup.sh -d server
sh /opt/nacos-3.2.1-cluster/server-3/bin/startup.sh -d server
sh /opt/nacos-3.2.1-cluster/console/bin/startup.sh -d console
确认 4 个 Nacos 进程启动后,再启动 nginx 并检查端口监听情况:
lsof -nP -iTCP:8080 -iTCP:8848 -iTCP:9848 -iTCP:18848 -iTCP:18858 -iTCP:18868 -sTCP:LISTEN
✓启动验证
访问 http://ip:8080 验证控制台是否可用。应用接入仍然只走 8848/9848。
微服务接入配置
修改 PIGX 各微服务的配置文件,将 Nacos 地址统一指向 nginx 入口:
spring:
cloud:
nacos:
discovery:
server-addr: pigx-register:8848
username: nacos
password: nacos
config:
server-addr: pigx-register:8848
username: nacos
password: nacos
如果没有域名,可以通过 hosts 将 pigx-register 指向 nginx 所在机器 IP:
⚠不要直连节点
Nacos 3.2 生产环境不建议继续使用 18848,18858,18868 这种多地址直连方式。推荐统一通过 nginx 暴露的 8848/9848 访问,避免客户端 HTTP 正常但 gRPC 连接失败。